package util;

import java.util.Calendar;

public class MergesortString {
	
	private int tamanho;
	private String[] array;
		
	public void sort(String[] array) throws IllegalArgumentException{
		this.array = array;
		tamanho = array.length;
		
		
		mergesort(0, tamanho - 1);		
	}
	
	private void mergesort(int inicio, int fim) throws IllegalArgumentException{
		int meio;
		if(inicio < fim){
			meio = (inicio + fim) / 2;
			
			if(inicio < meio){
				mergesort(inicio, meio);
			}
			if(meio+1 < fim){
				mergesort(meio + 1, fim);
			}
			
			merge(inicio, meio, fim);
		}
	}
	
	private void merge(int inicio, int meio, int fim){
		String[] aux = new String[fim - inicio + 1];
		
		int i = inicio;
		int j = meio + 1;
		int k = 0;
		
		while(i <= meio && j<= fim){
//			if(array[i].length() < 30 || array[j].length() < 30){
//				continue;
//			}
			if(array[i].length() < 30){
				throw new IllegalArgumentException("Pacote Invalido: menor que 30 caracteres - ["+ array[i] + "]");
			} if(array[j].length() < 30){
				throw new IllegalArgumentException("Pacote Invalido: menor que 30 caracteres - ["+ array[j] + "]");
			}
//			System.out.println("I: "+array[i]);
//			System.out.println("J: "+array[j]);
			Calendar dataI = Util.geraCalendar(array[i]);
			Calendar dataJ = Util.geraCalendar(array[j]);
			
			long timeInMilisI = dataI.getTimeInMillis();
			long timeInMilisJ = dataJ.getTimeInMillis();
						
			if(timeInMilisI <= timeInMilisJ){
				aux[k] = array[i];
				i++;
			} else{
				aux[k] = array[j];
				j++;
			}
			k++;
		}
		
		if(i<= meio){
			for (j = meio; j >= i; j--) {
				array[fim-meio+j] = array[j];
			}
		}
		for (i = 0; i < k; i++) {
			array[i+inicio] = aux[i];
		}
		
		aux = null;
	}
}
